package com.gopay.common.security.SensitiveInfo.service;

import com.gopay.common.cipher.constants.EncryptType;
import com.gopay.common.exception.SensitiveInfo.SensitiveInfoKeyException;

/**
 * 
 * @ClassName: SecurityKeysSupervise 
 * @Description: 密钥管理 
 * @author zyt 
 * @date 2016年9月2日 上午10:47:59
 */
public interface SecurityKeysSupervise {

	
	//SecurityKeyInfo getCurrentDataKeyInfo() throws SensitiveInfoKeyException;
	
	
	//SecurityKeyInfo getKeyInfoByTypeVersion(EncryptType encryptType, String keyVersion) throws SensitiveInfoKeyException;
	
	
	//EncryptType getCurrentEncryptType();

	/**
	 * 
	 * @Description: 		更换某种加密方式的master key 
	 * @param key 			新的master key
	 * @param encryptType 	加密方式 
	 * @author 				zyt
	 * @throws 				SensitiveInfoKeyException 
	 */
	void changeMasterKey(String key, EncryptType encryptType) throws SensitiveInfoKeyException;
	
	/**
	 * 
	 * @Description: 		更换某种加密方式的 data key 
	 * @param key 			新的data key
	 * @param encryptType 	加密方式 
	 * @author 				zyt
	 * @throws 				SensitiveInfoKeyException 
	 */
	void changeDataKey(String key, EncryptType encryptType, String keyVersion) throws SensitiveInfoKeyException;

	/**
	 * 
	 * @Description: 		更换某种加密方式的master key, 密钥随机生成
	 * @param encryptType 	加密方式 
	 * @author 				zyt
	 * @throws 				SensitiveInfoKeyException 
	 */
	void changeRandomMasterKey(EncryptType encryptType) throws SensitiveInfoKeyException;

	/**
	 * 
	 * @Description: 		更换某种加密方式的data key, 密钥随机生成
	 * @param encryptType 	加密方式 
	 * @author 				zyt
	 * @throws 				SensitiveInfoKeyException 
	 */
	void changeRandomDataKey(EncryptType encryptType) throws SensitiveInfoKeyException;

	/**
	 * 
	 * @Description: 	设置新密钥时候，获取密钥版本号 
	 * @return 			新密钥的版本
	 * @author 			zyt
	 */
	String getNewKeyVersion();

	/**
	 * 
	 * @Description: 	生成一个指定长度的随机字符串 
	 * @param length	指定长度
	 * @return 			生成的随机字符串
	 * @author 			zyt
	 */
	String getRandomString(int length);

}
